我今天原本計畫將昨天完成的 API,也就是上傳文字檔案,接著執行 ETL Pipeline,將檔案轉換成向量,並儲存到 Vector Stone 的那組功能。這次我打算採用 WebFlux 的風格來重寫 API,這也是我一開始設定的目標。一方面希望能提升效能,另一方面也希望藉此機會學習 WebFlux 的應用。畢竟之前在職場和專案中,我主要都是使用 Spring MVC,很少有機會接觸 WebFlux,這次可以說是一次刻意安排的練習機會。
理想很豐滿,現實卻很骨感。在實作過程中,我遇到了一個令人抓狂的問題,主要發生在檔案處理的部分。
原本我以為,當檔案上傳時,使用 Mono<FilePart>
,再透過 transferTo
方法將檔案儲存到暫存路徑就能輕鬆搞定。transferTo
是一個非同步操作,這表示我需要訂閱這個事件,確保檔案寫入完成後才能繼續進行後續處理。
為了達到這個目標,我使用了 Mono.defer
來進行延遲載入,確保 transferTo
完成後才會執行後面的處理邏輯。我的處理邏輯主要是 ETL Pipeline,我將這段邏輯包裝在 Mono.fromCallable
裡,以確保它在正確的時間點執行。
然而,現實總是喜歡給人「驚喜」,程式實際執行時卻總是遇到「檔案不存在」的錯誤。這個問題讓我陷入無止境的除錯循環,我不斷檢查程式碼,卻怎麼也找不到問題的根源。眼看鐵人賽的每日提交時間 deadline 就要到了,我只好先暫時放下這個部分,改用其他主題來「救急」。
既然程式碼一時卡關,不如先換個心情,來探索一下 AI 繪圖工具吧!我最推薦的莫過於 MidJourney,它的繪圖效果真的非常出色。除了 MidJourney 之外,還有開源的 Stable Diffusion,以及後起之秀 Flux。Flux 的效果也不錯,但參數調整比較複雜,所以我沒有花太多時間研究,畢竟我的理念是:如果付費工具能妥善解決我的問題,我會優先選擇付費方案。不過,Flux 可以透過前面提到的 GPU 算力平台 Replicate 來運行,即使你的電腦沒有高效能顯卡,也能利用這些平台進行運算。
另外,OpenAI 的 DALL·E 也是很值得嘗試的選擇。它的優點是操作簡便,我訂閱了 ChatGPT Plus 的方案,所以可以隨時生成圖像。就算你不是付費用戶,每天也有兩張圖片的免費額度。如果你想找免費的圖片生成工具,ChatGPT 絕對是個好選擇。此外,微軟爸爸的 Image Creator 也是基於 DALL·E 的技術開發的,你也可以考慮看看。
回到 MidJourney,它最初只有 Discord 版本,現在也推出網頁版了,操作起來更加便捷。可惜的是,MidJourney 是需要付費使用的,沒有提供免費試用。在使用 MidJourney 繪圖時,撰寫 Prompt 需要遵循一些基本的語法結構,主要可以分為四個部分:
此外 MidJourney 提供了多種進階參數,讓你的創作更具變化和獨特性:
--ar
:調整圖片的長寬比例。--no
:排除您不想要的元素,使生成的圖片更符合您的期待。--style
:調整圖片的藝術風格。參數值越高,圖片的藝術性越強,但提示詞的精確度可能會下降,需要在美感和準確性之間找到平衡點。--chaos
:增加生成圖片的隨機性,為您的創作帶來更多驚喜和可能性。此外,還有一個容易被忽略的小技巧:您可以在提示詞中使用「::
」來設定權重,藉此更精準地控制生成圖像的內容和風格。另外也可以善用「以圖生圖」功能,讓您的創作更添趣味。
技術學習之路,充滿未知的挑戰與驚喜。雖然在 WebFlux 檔案處理方面遇到瓶頸,但換個主題投入 AI 繪圖領域,也讓我發現了另一片廣闊天地。明日,我計畫持續深入研究 WebFlux,找出「檔案不存在」錯誤的根本原因。同時,也會持續關注 AI 繪圖的發展,探索更多有趣的應用。
如果你對 AI 繪圖感興趣,建議你多上網參考一些案例,像是 Twitter 或 Reddit 上的國外使用者經常分享有趣的提示詞。透過這些分享,你可以學習更多關鍵詞的使用技巧,為你的創作帶來更多靈感。